SQL Injection এবং Cross-Site Scripting (XSS) হল ওয়েব অ্যাপ্লিকেশনের মধ্যে নিরাপত্তার দুর্বলতা, যা যদি ঠিকমতো প্রতিরোধ না করা হয়, তাহলে অ্যাপ্লিকেশন ও ইউজারদের ডেটা ক্ষতিগ্রস্ত হতে পারে। এই দুটি আক্রমণ সম্পর্কে সচেতন হওয়া এবং সঠিক নিরাপত্তা পদক্ষেপ নেওয়া খুবই গুরুত্বপূর্ণ।
১. SQL Injection প্রতিরোধ
SQL Injection হল একটি আক্রমণ যেখানে আক্রমণকারী SQL কোড ইনজেক্ট করে এবং সার্ভারের ডাটাবেস থেকে অননুমোদিত তথ্য চুরি করতে পারে বা ডেটা পরিবর্তন করতে পারে।
SQL Injection এর সমস্যা
SQL Injection আক্রমণ সাধারনত ঘটে যখন অ্যাপ্লিকেশন সরাসরি ইউজারের ইনপুটকে SQL কোয়েরিতে ইনক্লুড করে। যদি অ্যাপ্লিকেশন ইনপুট সঠিকভাবে যাচাই না করে বা ফিল্টার না করে, তবে আক্রমণকারী খারাপ SQL কোড সরবরাহ করে যার মাধ্যমে তারা ডাটাবেসে অবৈধ কার্যক্রম চালাতে পারে।
SQL Injection এর উদাহরণ:
// খারাপ উদাহরণ: ইউজার ইনপুট সরাসরি SQL কোয়েরিতে ইনক্লুড করা
const username = req.body.username;
const password = req.body.password;
const query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;
db.query(query, (err, results) => {
if (err) throw err;
console.log(results);
});এখানে, যদি username বা password ফিল্ডে কোনও SQL কোড ইনজেক্ট করা হয় (যেমন ' OR 1=1 --), তাহলে আক্রমণকারী অবৈধভাবে লগ ইন করতে পারে।
SQL Injection প্রতিরোধ:
- Prepared Statements (Parameterized Queries):
- SQL কোয়েরি প্যারামিটারাইজড বা প্রিপেয়ারড স্টেটমেন্ট ব্যবহার করা উচিত, যাতে ইউজার ইনপুট ডেটা কোয়েরির অংশ হিসেবে ব্যবহার না হয়ে, আলাদা প্যারামিটার হিসেবে পাঠানো হয়।
- ORM ব্যবহার:
- অনেক ORM (Object-Relational Mapping) লাইব্রেরি যেমন Sequelize, TypeORM, Mongoose, অটোমেটিক্যালি SQL Injection প্রতিরোধের জন্য প্যারামিটারাইজড কোয়েরি ব্যবহার করে।
- Input Validation:
- ইউজারের ইনপুট যথাযথভাবে যাচাই করুন। শুধুমাত্র অনুমোদিত ইনপুট গ্রহণ করুন।
নিরাপদ উদাহরণ (Prepared Statement):
const sql = 'SELECT * FROM users WHERE username = ? AND password = ?';
db.query(sql, [username, password], (err, results) => {
if (err) throw err;
console.log(results);
});এখানে, ? প্যারামিটার ইউজারের ইনপুট ডেটাকে সঠিকভাবে স্যানিটাইজ করে, ফলে SQL Injection আক্রমণ প্রতিরোধ করা হয়।
২. Cross-Site Scripting (XSS) প্রতিরোধ
Cross-Site Scripting (XSS) হল একটি আক্রমণ যেখানে আক্রমণকারী ইউজারের ব্রাউজারে ক্ষতিকর স্ক্রিপ্ট (যেমন JavaScript) ইনজেক্ট করে। এই স্ক্রিপ্ট ইউজারের পক্ষ থেকে অন্য ওয়েবসাইটে অবৈধ কাজ করতে পারে, যেমন কুকিজ চুরি করা বা সেশন হাইজ্যাক করা।
XSS এর উদাহরণ:
<input type="text" name="comment" value="Some comment">
<button onclick="alert(document.querySelector('input[name=comment]').value)">Submit</button>এখানে, ইউজার যে কোন স্ক্রিপ্ট ইনপুট করতে পারে (যেমন <script>alert('XSS')</script>) এবং এটি ইউজারের ব্রাউজারে চলবে।
XSS প্রতিরোধ:
- Input Sanitization:
- ইউজার ইনপুট সঠিকভাবে স্যানিটাইজ করতে হবে। যে কোন HTML বা JavaScript ইনপুট পরিশোধন করা উচিত।
- Output Encoding:
- যখন ইউজারের ইনপুট রেন্ডার করা হবে, তখন ইনপুটে থাকা HTML বা JavaScript কোড encode করতে হবে যাতে সেগুলি কোড হিসেবে এক্সিকিউট না হয়।
- Content Security Policy (CSP):
- CSP ব্যবহার করুন যাতে স্ক্রিপ্টগুলি শুধুমাত্র নির্দিষ্ট সোর্স থেকে লোড হয়।
- Use Safe APIs:
- যখন আপনি DOM এ ইউজারের ইনপুট যোগ করবেন, তখন
textContentবাinnerTextব্যবহার করুন, যা ইনপুটের HTML উপাদানকে নিরাপদভাবে রেন্ডার করবে। কখনোইinnerHTMLব্যবহার করবেন না, কারণ এটি ইউজারের ইনপুটকে HTML বা JavaScript হিসেবে এক্সিকিউট করে।
- যখন আপনি DOM এ ইউজারের ইনপুট যোগ করবেন, তখন
XSS প্রতিরোধের নিরাপদ উদাহরণ:
// Unsafe
document.getElementById('comment').innerHTML = req.body.comment; // XSS vulnerability
// Safe
document.getElementById('comment').textContent = req.body.comment; // Safeএখানে, textContent ব্যবহার করা হয়েছে, যা HTML বা JavaScript কোড হিসেবে এক্সিকিউট হওয়া থেকে রোধ করবে।
সারাংশ
| Vulnerability | Explanation | Prevention Steps |
|---|---|---|
| SQL Injection | Attacker injects malicious SQL code into a query, allowing unauthorized access or data manipulation. | 1. Use prepared statements / parameterized queries. 2. Use ORM libraries. 3. Validate user input. |
| XSS | Attacker injects malicious JavaScript into a webpage to execute code in a victim's browser. | 1. Sanitize input data. 2. Use output encoding. 3. Implement CSP (Content Security Policy). 4. Use safe APIs like textContent. |
SQL Injection এবং XSS প্রতিরোধ করার জন্য নিরাপদ কোড লেখা এবং ইউজারের ইনপুট যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। নিরাপত্তা ফিচারগুলি আপনার ওয়েব অ্যাপ্লিকেশনকে আক্রমণ থেকে সুরক্ষিত রাখে এবং ডেটার নিরাপত্তা নিশ্চিত করে।
Read more